/*
 * PagEventosAtividade.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlInterno;
import srac.controleatividades.cdp.Aluno;
import srac.controleatividades.cdp.Usuario;

public class PagEventosAluno extends GenericForwardComposer {

    private CtrlInterno ctrlInterno = CtrlInterno.getInstance();
    private Window winEventosAluno;
    private Listbox listAlunos;
    private Div boxInformacao;
    private Label msg;
    private List<Aluno> alunos;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        
        ctrlInterno.setPagEventosAluno(this);

        while (listAlunos.getItemCount() > 0) {
            listAlunos.removeItemAt(0);
        }

        alunos = ctrlInterno.obterAlunos();

        if (alunos != null) {
            for (int i = 0; i < alunos.size(); i++) {
                Aluno a = alunos.get(i);
                Listitem linha = new Listitem(a.getNome(), a);
                
                linha.appendChild(new Listcell(a.getEmail()));
                if(a.getUsuario().getAtivo())
                {
                    linha.appendChild(new Listcell("Ativo"));
                }
                else
                {
                    linha.appendChild(new Listcell("Desativo"));
                }

                linha.setParent(listAlunos);
            }
        }
         
    }

    public void onCreate$winEventosAlunos(Event event) {
        Usuario usuario = (Usuario) Executions.getCurrent().getSession().getAttribute("usuario");
        
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (usuario == null) {
            Executions.sendRedirect("/");
            winEventosAluno.detach();
        }
    }

    public void addAluno(Aluno a) {
        Listitem linha = new Listitem(a.getNome(), a);
        linha.appendChild(new Listcell(a.getEmail()));
        if(a.getUsuario().getAtivo())
        {
            linha.appendChild(new Listcell("Ativo"));
        }
        else
        {
            linha.appendChild(new Listcell("Desativo"));
        }
        linha.setParent(listAlunos);
    }

    //Atualiza apenas uma atividade
    public void refreshAluno(Aluno a) {
        for (int i = 0; i < listAlunos.getItemCount(); i++) {
            if (listAlunos.getItemAtIndex(i).getValue() == a) {
                listAlunos.getItemAtIndex(i).getChildren().clear();
                listAlunos.getItemAtIndex(i).appendChild(new Listcell(a.getNome()));
                listAlunos.getItemAtIndex(i).appendChild(new Listcell(a.getEmail()));
                if(a.getUsuario().getAtivo())
                {
                    listAlunos.getItemAtIndex(i).appendChild(new Listcell("Ativo"));
                }
                else
                {
                    listAlunos.getItemAtIndex(i).appendChild(new Listcell("Desativo"));
                }
                break;
            }
        }
    }
    

    
    
    public void onClick$excluirAluno(Event event) { //Exclui uma atividade
        Listitem listitem = listAlunos.getSelectedItem(); //Pega o tipo de atividade selecionado
        if (listitem != null) {  
            eventoExcluir();   
        } 
        else {
            setMensagemAviso("info", "Selecione um Aluno!");
        }
    }
    
    //Inclui uma nova atividade
    public void onClick$incluirAluno(Event event) {
        ctrlInterno.abrirIncluirAluno();
    }

   
    
    public void onClick$alterarAluno(Event event) { //Altera um tipo de atividade
        Listitem listitem = listAlunos.getSelectedItem(); //Pega o tipo de atividade selecionado
        if (listitem != null) {
            Aluno a = listitem.getValue();
            ctrlInterno.abrirEditarAluno(a);
        }
        else {
            setMensagemAviso("info", "Selecione um Aluno!");
        }
    }

    public void onClick$consultarAluno(Event event) { //Consulta um tipo de atividade
        Listitem listitem = listAlunos.getSelectedItem();
        if (listitem != null) {
            Aluno a = listitem.getValue();
            ctrlInterno.abrirConsultarAluno(a);
        }
        else {
            setMensagemAviso("info", "Selecione um Aluno!");
        }
    }

    

    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
    
    public void onClick$ativarDesativarAluno(Event event) {
        Listitem listitem = listAlunos.getSelectedItem();
        if (listitem != null) {
            Aluno a = listitem.getValue();
            if(a.getUsuario().getAtivo())
            {
                ctrlInterno.ativarDesativarUsuario(a.getUsuario(), false);
            }
            else
            {
                ctrlInterno.ativarDesativarUsuario(a.getUsuario(), true);
            }
            refreshAluno(a);
        }
    }
    
    public void eventoExcluir() //Metodo criado para exibir a msg de exclusão!
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <Messagebox.ClickEvent> e = new EventListener() { //Captura os eventos do mouse
            @Override
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) { //Se o usuário clicar no botão de sim na popup
                    Listitem listitem = listAlunos.getSelectedItem(); //Pega a atividade selecionada
                    Aluno a = listitem.getValue();
                    if (ctrlInterno.apagarAluno(a)) { //Verifica se é possivel apagar, se for ele remove ela da lista
                        listAlunos.removeItemAt(listAlunos.getSelectedIndex());
                        setMensagemAviso("success", "Aluno excluído com sucesso!");
                    } 
                    else {
                        setMensagemAviso("error", "Não foi possível excluir o Aluno, já possui vinculos!"); 
                    }
                    
                }
            }
        };
        Messagebox.show("Deseja excluir o aluno?","Confirmação",b,Messagebox.QUESTION , e); //Mensagem de exclusão
    }
}